PsySc0rpi0n Posted September 16, 2016 at 09:06 PM Report #598934 Posted September 16, 2016 at 09:06 PM Boas... Escrevi um pequeno código para recriar um movimento tipo radial para usar nos conhecidos sistemas pan/tilt, que usam dois servo-motores, um para o eixo dos xx e outro para o eixo dos yy. #include <Servo.h> #define VSPEED 8 #define HSPEED 10 #define UP 1 #define DOWN 0 Servo horservo; // create servo object to control a servo Servo verservo; // a maximum of eight servo objects can be created int verpos = 0; // variable to store the vertical servo position int horpos = 0; // variable to store the horizontal servo position void setup(){ horservo.attach(9); // attaches the horizontal servo on pin 9 to the servo object verservo.attach(8); // attaches the vertical servo on pin 9 to the servo object horservo.write(90); verservo.write(0); Serial.begin(9600); } void Print_Data(){ Serial.print("Vert Pos: "); Serial.print(verpos); Serial.print(","); Serial.print("Hor Pos "); Serial.print(horpos); Serial.print('\n'); } void motion_1(){ for(; horpos < 180; horpos += 2){ horservo.write(horpos); if(verpos < 90){ verservo.write(++verpos); delay(VSPEED); } else if (verpos > 0){ verservo.write(--verpos); delay(VSPEED); } delay(HSPEED); Print_Data(); } for(; horpos > 0; horpos -= 2){ horservo.write(horpos); if(verpos < 90){ verservo.write(--verpos); delay(VSPEED); } else if (verpos > 0){ verservo.write(--verpos); delay(VSPEED); } delay(HSPEED); Print_Data(); } } void motion_2(){ for(pos = start_pos; pos != end_pos; ) } void loop(){ motion_1(); } O código está a funcionar, não sei se está perfeito ou não, mas para já serve! No entanto, alguém com que eu estava a conversar, disse-me que o meu código podia ser simplificado e deu-me algumas pistas: Citação all i meant is your two loops are more or less the same thing with a parameter change. they're both basically for (pos = start_pos; pos != end_pos; pos += delta_to_target) { } where delta_to_target is +2 or -2. it's a pretty general observation that you probably don't need two completely separate loops. Estas foram as pistas! Será que me conseguem ajudar??? Kurt Cobain - Grunge misses you Nissan GT-R - beast killer
HappyHippyHippo Posted September 17, 2016 at 05:03 AM Report #598937 Posted September 17, 2016 at 05:03 AM presumo que estejas a falar disto : void motion_1() { for (int dir = 1; dir != -1 && horpos <= 0; horpos += 2 * dir) { if (horpos >= 180) { dir = -1; continue; } horservo.write(horpos); if (verpos < 90) verservo.write(verpos += 1 * dir); else if (verpos > 0) verservo.write(--verpos); delay(VSPEED); delay(HSPEED); Print_Data(); } } IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
PsySc0rpi0n Posted September 17, 2016 at 09:50 AM Author Report #598939 Posted September 17, 2016 at 09:50 AM (edited) Vou experimentar! 🙂 Não deu! Edited September 17, 2016 at 09:50 AM by PsySc0rpi0n Kurt Cobain - Grunge misses you Nissan GT-R - beast killer
seuqram Posted September 17, 2016 at 11:34 AM Report #598941 Posted September 17, 2016 at 11:34 AM (edited) dir != -1 && horpos <= 0; para apenas: horpos > 0 Edited September 17, 2016 at 11:35 AM by seuqram
HappyHippyHippo Posted September 17, 2016 at 11:27 PM Report #598966 Posted September 17, 2016 at 11:27 PM 11 hours ago, seuqram said: dir != -1 && horpos <= 0; para apenas: horpos > 0 não sabes o valor inicial de horpos ----- @PsySc0rpi0n altera só a condição de paragem do ciclo for para : dir != -1 && horpos > 0 IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
seuqram Posted September 18, 2016 at 03:56 AM Report #598970 Posted September 18, 2016 at 03:56 AM (edited) Citação não sabes o valor inicial de horpos Pois, não pensei nessa hipotese... com a alternativa que voce deu, "&&", têm o mesmo efeito e aliás, se dir for igual a -1, não executa a segunda fase do loop. Dessa maneira, corrige-o: dir || horpos > 0 Que é a maneira simplificada disto: !(dir != -1 && horpos <= 0) que foi o que voce pensou no inicio, mas na forma de excessão. De resto, acho que não há razão para o codigo não funcionar... Edited September 18, 2016 at 04:19 AM by seuqram
PsySc0rpi0n Posted September 18, 2016 at 06:58 AM Author Report #598971 Posted September 18, 2016 at 06:58 AM Está melhor mas ainda não está correcto. O que está a acontecer é o seguinte: Citação Vert Pos: 0,Hor Pos 90 Vert Pos: 1,Hor Pos 92 Vert Pos: 2,Hor Pos 94 Vert Pos: 3,Hor Pos 96 Vert Pos: 4,Hor Pos 98 Vert Pos: 5,Hor Pos 100 Vert Pos: 6,Hor Pos 102 Vert Pos: 7,Hor Pos 104 Vert Pos: 8,Hor Pos 106 Vert Pos: 9,Hor Pos 108 Vert Pos: 10,Hor Pos 110 Vert Pos: 11,Hor Pos 112 Vert Pos: 12,Hor Pos 114 Vert Pos: 13,Hor Pos 116 Vert Pos: 14,Hor Pos 118 Vert Pos: 15,Hor Pos 120 Vert Pos: 16,Hor Pos 122 Vert Pos: 17,Hor Pos 124 Vert Pos: 18,Hor Pos 126 Vert Pos: 19,Hor Pos 128 Vert Pos: 20,Hor Pos 130 Vert Pos: 21,Hor Pos 132 Vert Pos: 22,Hor Pos 134 Vert Pos: 23,Hor Pos 136 Vert Pos: 24,Hor Pos 138 Vert Pos: 25,Hor Pos 140 Vert Pos: 26,Hor Pos 142 Vert Pos: 27,Hor Pos 144 Vert Pos: 28,Hor Pos 146 Vert Pos: 29,Hor Pos 148 Vert Pos: 30,Hor Pos 150 Vert Pos: 31,Hor Pos 152 Vert Pos: 32,Hor Pos 154 Vert Pos: 33,Hor Pos 156 Vert Pos: 34,Hor Pos 158 Vert Pos: 35,Hor Pos 160 Vert Pos: 36,Hor Pos 162 Vert Pos: 37,Hor Pos 164 Vert Pos: 38,Hor Pos 166 Vert Pos: 39,Hor Pos 168 Vert Pos: 40,Hor Pos 170 Vert Pos: 41,Hor Pos 172 Vert Pos: 42,Hor Pos 174 Vert Pos: 43,Hor Pos 176 Vert Pos: 44,Hor Pos 178 Vert Pos: 45,Hor Pos 180 Vert Pos: 45,Hor Pos 178 Vert Pos: 46,Hor Pos 180 Vert Pos: 46,Hor Pos 178 Vert Pos: 47,Hor Pos 180 Vert Pos: 47,Hor Pos 178 Vert Pos: 48,Hor Pos 180 Vert Pos: 48,Hor Pos 178 Vert Pos: 49,Hor Pos 180 Vert Pos: 49,Hor Pos 178 Vert Pos: 50,Hor Pos 180 Vert Pos: 50,Hor Pos 178 Vert Pos: 51,Hor Pos 180 Vert Pos: 51,Hor Pos 178 Vert Pos: 52,Hor Pos 180 Vert Pos: 52,Hor Pos 178 Vert Pos: 53,Hor Pos 180 Vert Pos: 53,Hor Pos 178 Vert Pos: 54,Hor Pos 180 Vert Pos: 54,Hor Pos 178 Vert Pos: 55,Hor Pos 180 Vert Pos: 55,Hor Pos 178 Vert Pos: 56,Hor Pos 180 Vert Pos: 56,Hor Pos 178 Vert Pos: 57,Hor Pos 180 Vert Pos: 57,Hor Pos 178 Vert Pos: 58,Hor Pos 180 Vert Pos: 58,Hor Pos 178 Vert Pos: 59,Hor Pos 180 Vert Pos: 59,Hor Pos 178 Vert Pos: 60,Hor Pos 180 Vert Pos: 60,Hor Pos 178 Vert Pos: 61,Hor Pos 180 Vert Pos: 61,Hor Pos 178 Vert Pos: 62,Hor Pos 180 Vert Pos: 62,Hor Pos 178 Vert Pos: 63,Hor Pos 180 Vert Pos: 63,Hor Pos 178 Vert Pos: 64,Hor Pos 180 Vert Pos: 64,Hor Pos 178 Vert Pos: 65,Hor Pos 180 Vert Pos: 65,Hor Pos 178 Vert Pos: 66,Hor Pos 180 Vert Pos: 66,Hor Pos 178 Vert Pos: 67,Hor Pos 180 Vert Pos: 67,Hor Pos 178 Vert Pos: 68,Hor Pos 180 Vert Pos: 68,Hor Pos 178 Vert Pos: 69,Hor Pos 180 Vert Pos: 69,Hor Pos 178 Vert Pos: 70,Hor Pos 180 Vert Pos: 70,Hor Pos 178 Vert Pos: 71,Hor Pos 180 Vert Pos: 71,Hor Pos 178 Vert Pos: 72,Hor Pos 180 Vert Pos: 72,Hor Pos 178 Vert Pos: 73,Hor Pos 180 Vert Pos: 73,Hor Pos 178 Vert Pos: 74,Hor Pos 180 Vert Pos: 74,Hor Pos 178 Vert Pos: 75,Hor Pos 180 Vert Pos: 75,Hor Pos 178 Vert Pos: 76,Hor Pos 180 Vert Pos: 76,Hor Pos 178 Vert Pos: 77,Hor Pos 180 Vert Pos: 77,Hor Pos 178 Vert Pos: 78,Hor Pos 180 Vert Pos: 78,Hor Pos 178 Vert Pos: 79,Hor Pos 180 Vert Pos: 79,Hor Pos 178 Vert Pos: 80,Hor Pos 180 Vert Pos: 80,Hor Pos 178 Vert Pos: 81,Hor Pos 180 Vert Pos: 81,Hor Pos 178 Vert Pos: 82,Hor Pos 180 Vert Pos: 82,Hor Pos 178 Vert Pos: 83,Hor Pos 180 Vert Pos: 83,Hor Pos 178 Vert Pos: 84,Hor Pos 180 Vert Pos: 84,Hor Pos 178 Vert Pos: 85,Hor Pos 180 Vert Pos: 85,Hor Pos 178 Vert Pos: 86,Hor Pos 180 Vert Pos: 86,Hor Pos 178 Vert Pos: 87,Hor Pos 180 Vert Pos: 87,Hor Pos 178 Vert Pos: 88,Hor Pos 180 Vert Pos: 88,Hor Pos 178 Vert Pos: 89,Hor Pos 180 Vert Pos: 89,Hor Pos 178 Vert Pos: 90,Hor Pos 180 Vert Pos: 90,Hor Pos 178 Vert Pos: 89,Hor Pos 180 Vert Pos: 89,Hor Pos 178 Vert Pos: 90,Hor Pos 180 Vert Pos: 90,Hor Pos 178 Vert Pos: 89,Hor Pos 180 Vert Pos: 89,Hor Pos 178 Vert Pos: 90,Hor Pos 180 Vert Pos: 90,Hor Pos 178 Vert Pos: 89,Hor Pos 180 Vert Pos: 89,Hor Pos 178 Vert Pos: 90,Hor Pos 180 Vert Pos: 90,Hor Pos 178 Vert Pos: 89,Hor Pos 180 Vert Pos: 89,Hor Pos 178 Vert Pos: 90,Hor Pos 180 Vert Pos: 90,Hor Pos 178 Vert Pos: 89,Hor Pos 180 Vert Pos: 89,Hor Pos 178 Vert Pos: 90,Hor Pos 180 Vert Pos: 90,Hor Pos 178 Vert Pos: 89,Hor Pos 180 Vert Pos: 89,Hor Pos 178 Vert Pos: 90,Hor Pos 180 Vert Pos: 90,Hor Pos 178 Vert Pos: 89,Hor Pos 180 Vert Pos: 89,Hor Pos 178 Vert Pos: 90,Hor Pos 180 Vert Pos: 90,Hor Pos 178 Vert Pos: 89,Hor Pos 180 Vert Pos: 89,Hor Pos 178 Vert Pos: 90,Hor Pos 180 Vert Pos: 90,Hor Pos 178 Vert Pos: 89,Hor Pos 180 Vert Pos: 89,Hor Pos 178 Vert Pos: 90,Hor Pos 180 Vert Pos: 90,Hor Pos 178 Vert Pos: 89,Hor Pos 180 Vert Pos: 89,Hor Pos 178 Vert Pos: 90,Hor Pos 180 Vert Pos: 90,Hor Pos 178 Vert Pos: 89,Hor Pos 180 Vert Pos: 89,Hor Pos 178 Vert Pos: 90,Hor Pos 180 Vert Pos: 90,Hor Pos 178 Vert Pos: 89,Hor Pos 180 Vert Pos: 89,Hor Pos 178 Vert Pos: 90,Hor Pos 180 Vert Pos: 90,Hor Pos 178 Vert Pos: 89,Hor Pos 180 Vert Pos: 89,Hor Pos 178 Vert Pos: 90,Hor Pos 180 Vert Pos: 90,Hor Pos 178 Vert Pos: 89,Hor Pos 180 Vert Pos: 89,Hor Pos 178 Vert Pos: 90,Hor Pos 180 Vert Pos: 90,Hor Pos 178 Vert Pos: 89,Hor Pos 180 Vert Pos: 89,Hor Pos 178 Entretanto deram-me outra solução mas que tenho que a adaptar para o meu caso e como o código já é um pouco mais complexo, ainda não me debrucei sobre ele para ver se sou capaz de o adaptar! Spoiler #include <Servo.h> void setup(){ Serial.begin(9600); } struct vec {int x; int y;}; vec dest; vec pos; void printVec(Print &p, const struct vec &c) { p.print(c.x); p.print(' '); p.print(c.y); } void updateDestinations() { dest.x = Serial.parseInt(); dest.y = Serial.parseInt(); unsigned long start = millis(); while (millis() - start < 100) { while (Serial.read() != -1) ; } } int int_sgn(int n){ if (n > 0){ return +1; } if (n < 0){ return -1; } return 0; } void loop() { if (Serial.available()) { updateDestinations(); } Serial.print(F( "Dest : ")); printVec(Serial, dest); Serial.print(F("|Pos : ")); printVec(Serial, pos ); const bool arrived = (dest.x == pos.x && dest.y == pos.y); Serial.println(arrived ? F(" [arrived]") : F(" [traveling]")); delay(100); pos.x += int_sgn(dest.x - pos.x) * 2; pos.y += int_sgn(dest.y - pos.y) ; } Kurt Cobain - Grunge misses you Nissan GT-R - beast killer
PsySc0rpi0n Posted September 18, 2016 at 10:36 AM Author Report #598974 Posted September 18, 2016 at 10:36 AM Acho que o problema está no int dir = 1 dentro do for, porque mesmo quando dir passa a -1, quando o loop volta a ser exectado, o dir volta a ser 1. Kurt Cobain - Grunge misses you Nissan GT-R - beast killer
HappyHippyHippo Posted September 18, 2016 at 12:01 PM Report #598978 Posted September 18, 2016 at 12:01 PM actualiza o horpos antes da instrução continue. O problema e que ao não actualizar o horpos esta sempre a alterar o dir. isto de responder de telemovel e complicado IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
PsySc0rpi0n Posted September 18, 2016 at 01:23 PM Author Report #598979 Posted September 18, 2016 at 01:23 PM 1 hour ago, HappyHippyHippo said: actualiza o horpos antes da instrução continue. O problema e que ao não actualizar o horpos esta sempre a alterar o dir. isto de responder de telemovel e complicado void motion_2(){ for (int dir = 1; dir != -1 && horpos > 0;) { horpos += 2 * dir; horservo.write(horpos); delay(HSPEED); if (horpos >= 180) { dir = -1; continue; } if (verpos < 90) verservo.write(verpos += 1 * dir); else if (verpos > 0) verservo.write(verpos += 1 * dir); delay(VSPEED); Print_Data(); } } Se te referias a isto, também não está a funcionar bem! Kurt Cobain - Grunge misses you Nissan GT-R - beast killer
seuqram Posted September 18, 2016 at 02:45 PM Report #598980 Posted September 18, 2016 at 02:45 PM (edited) for (int dir = 1; dir == 1 || horpos > 0; horpos += 2 * dir;) { //não te esqueças de mudares a condição! horservo.write(horpos); delay(HSPEED); if (horpos >= 180) { dir = -1; horpos += 2 * dir; //o continue salta a instrução do "horpos += 2 * dir" dentro do for loop, e por isso, tens de mete-la aqui dentro da condição //depois de mudares o dir para -1, senão o horpos ficaria >= 180, e esta condição estaria sempre a ser executada. continue; } Edited September 18, 2016 at 02:49 PM by seuqram
PsySc0rpi0n Posted September 18, 2016 at 02:51 PM Author Report #598982 Posted September 18, 2016 at 02:51 PM Continua a não dar! Está assim a função: void motion_2(){ for (int dir = 1; dir == 1 && horpos > 0; horpos += 2*dir) { horservo.write(horpos); delay(HSPEED); if (horpos >= 180) { dir = -1; horpos += 2 * dir; continue; } if (verpos < 90) verservo.write(verpos += 1 * dir); else if (verpos > 0) verservo.write(verpos += 1 * dir); delay(VSPEED); Print_Data(); } } O servo vertical está a ir para fora dos limites que deviam ser entre 0 e 90. Kurt Cobain - Grunge misses you Nissan GT-R - beast killer
seuqram Posted September 18, 2016 at 03:00 PM Report #598983 Posted September 18, 2016 at 03:00 PM (edited) else if (verpos > 0) verservo.write(verpos += 1 * dir); não era soposto ser só isto: else if (verpos > 0) verservo.write(--verpos); ou simplificado (esse if é desnecessário): else verservo.write(--verpos); Edited September 18, 2016 at 03:01 PM by seuqram
PsySc0rpi0n Posted September 18, 2016 at 03:04 PM Author Report #598984 Posted September 18, 2016 at 03:04 PM Não sei porquê mas não está a dar! O servo horizontal só anda até aos 180 e não volta para trás e o vertical só começa o movimento quando o horizontal chega aos 180. E também não volta para trás! Kurt Cobain - Grunge misses you Nissan GT-R - beast killer
seuqram Posted September 18, 2016 at 03:10 PM Report #598985 Posted September 18, 2016 at 03:10 PM dir == 1 && horpos > 0 a condição... 😛 dir == 1 || horpos > 0
seuqram Posted September 18, 2016 at 03:38 PM Report #598986 Posted September 18, 2016 at 03:38 PM (edited) horpos começa com 90, e verpos começa com 0. verpos só começa a aumentar quando chega a 90, que é quando horpos passa pelos 180 e volta aos 90. Eu não percebo muito bem o problema em termos reais, mas vejo que verpos vai ficar estacado nos 90 (no codigo inicial também era assim). Podias eliminar o if/else dos verservo e fazer algo semelhante como o horservo: void motion_2(){ for (int dir = 1; dir == 1 || horpos > valor_inicial_horpos; horpos += 2*dir, verpos += dir) { horservo.write(horpos); delay(VSPEED); verservo.write(verpos) delay(HSPEED); if (horpos >= 180 + valor_inicial_horpos) { dir = -1; horpos -= 2; verpos -= 1; continue; } Print_Data(); } } horpos vai até 180 + init e volta ao init. verpos vai até 90 + init e volta init. No caso de 180 ser o maximo e 0 o minimo (que passas pelas funções de versvo e horservo), e o valor inicial do horpos não poder ser 0 e o do verpos menos ou igual a 90, tens de criar duas variaveis de direção, uma para o verpos e outra para o horpos. Mas parece que não é o teu problema. Edited September 18, 2016 at 03:46 PM by seuqram
PsySc0rpi0n Posted September 18, 2016 at 09:06 PM Author Report #598990 Posted September 18, 2016 at 09:06 PM (edited) Mudei o && para || e acho que á está a funcionar! E agora que ta ajudarem-me a adaptar o código que me sugeriram para o tentar usar? Já agora, fica aqui um video dos dois servos a trabalhar: Spoiler https://dl.dropboxusercontent.com/u/89393477/servo_radial_motion.mp4 Edited September 18, 2016 at 09:49 PM by PsySc0rpi0n Kurt Cobain - Grunge misses you Nissan GT-R - beast killer
HappyHippyHippo Posted September 19, 2016 at 10:27 AM Report #598992 Posted September 19, 2016 at 10:27 AM void motion_2() { for (int dir = 1; dir == 1 || horpos > 0; // esta actualização de verpos não está correcta em relação ao código inicial horpos += 2 * dir, verpos += dir) { horservo.write(horpos); delay(VSPEED); verservo.write(verpos) delay(HSPEED); if (horpos >= 180) dir = -1; Print_Data(); } } un gajo escreve um código às 6 da matina e passa um fim-de-semana a apanhar borracheiras e ficam o fórum num pantanas !! ---------- o que queres dizer com "adaptar o código" ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
PsySc0rpi0n Posted September 19, 2016 at 01:31 PM Author Report #598998 Posted September 19, 2016 at 01:31 PM Não percebi o que quiseste dizer com "a actualização da variável verpos não está correcta em relação ao código inicial" porque pelo menos aparentemente, a coisa está a funcionar! Em relação a adpatar o código, estava a falar no código que me foi sugerido por alguém no IRC. Este código: #include <Servo.h> void setup(){ Serial.begin(9600); } struct vec {int x; int y;}; vec dest; vec pos; void printVec(Print &p, const struct vec &c) { p.print(c.x); p.print(' '); p.print(c.y); } void updateDestinations() { dest.x = Serial.parseInt(); dest.y = Serial.parseInt(); unsigned long start = millis(); while (millis() - start < 100) { while (Serial.read() != -1) ; } } int int_sgn(int n){ if (n > 0){ return +1; } if (n < 0){ return -1; } return 0; } void loop() { if (Serial.available()) { updateDestinations(); } Serial.print(F( "Dest : ")); printVec(Serial, dest); Serial.print(F("|Pos : ")); printVec(Serial, pos ); const bool arrived = (dest.x == pos.x && dest.y == pos.y); Serial.println(arrived ? F(" [arrived]") : F(" [traveling]")); delay(100); pos.x += int_sgn(dest.x - pos.x) * 2; pos.y += int_sgn(dest.y - pos.y) ; } Kurt Cobain - Grunge misses you Nissan GT-R - beast killer
HappyHippyHippo Posted September 19, 2016 at 01:40 PM Report #598999 Posted September 19, 2016 at 01:40 PM 7 minutes ago, PsySc0rpi0n said: Não percebi o que quiseste dizer com "a actualização da variável verpos não está correcta em relação ao código inicial" porque pelo menos aparentemente, a coisa está a funcionar! funcionar, deve funcionar, mas para condições iniciais diferentes (e escolhidas a dedo) o resultado é diferente. ps : tenta descobrir um caso desses 7 minutes ago, PsySc0rpi0n said: Em relação a adpatar o código, estava a falar no código que me foi sugerido por alguém no IRC. Este código: #include <Servo.h> void setup(){ Serial.begin(9600); } struct vec {int x; int y;}; vec dest; vec pos; void printVec(Print &p, const struct vec &c) { p.print(c.x); p.print(' '); p.print(c.y); } void updateDestinations() { dest.x = Serial.parseInt(); dest.y = Serial.parseInt(); unsigned long start = millis(); while (millis() - start < 100) { while (Serial.read() != -1) ; } } int int_sgn(int n){ if (n > 0){ return +1; } if (n < 0){ return -1; } return 0; } void loop() { if (Serial.available()) { updateDestinations(); } Serial.print(F( "Dest : ")); printVec(Serial, dest); Serial.print(F("|Pos : ")); printVec(Serial, pos ); const bool arrived = (dest.x == pos.x && dest.y == pos.y); Serial.println(arrived ? F(" [arrived]") : F(" [traveling]")); delay(100); pos.x += int_sgn(dest.x - pos.x) * 2; pos.y += int_sgn(dest.y - pos.y) ; } tens de ser mais específico IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now